﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using pdtransport_v2._0.Models;
using System.IO;

namespace pdtransport_v2._0.Areas.back.Controllers
{
    public class TenXeController : Controller
    {
        //
        // GET: /back/TenXe/
        pdtransportDataContext datacontext = new pdtransportDataContext();
        public ActionResult DanhSach(string keyword)
        {
            int total_rows = 0;
            List<TenXe> tenxes;
            if (keyword == null)
            {
                total_rows = (from tx in datacontext.TenXes
                              select tx).Count();
            }
            else
            {
                total_rows = (from tx in datacontext.TenXes
                              where tx.TenXe1.Contains(keyword)
                              select tx).Count();
            }

            ViewBag.total_row = total_rows;
            string base_URL = "danhsach"; // tên method của controller TenXeController

            // phan trang
            string URL_segment;
            try
            {
                URL_segment = Request.Url.Segments[4];
            }
            catch (Exception)
            {
                URL_segment = null;
            }

            Libraries.Pagination pagination = new Libraries.Pagination(base_URL, URL_segment, total_rows);
            string pageLinks = pagination.GetPageLinks();
            int start = (pagination.CurPage - 1) * pagination.PerPage;
            int offset = pagination.PerPage;
            if (URL_segment != null)
                pageLinks = pageLinks.Replace(base_URL + "/", "");
            ViewBag.pageLinks = pageLinks;
            // phan trang

            if (keyword == null)
            {
                tenxes = (from tx in datacontext.TenXes
                             select tx).Skip(start).Take(offset).ToList();
            }
            else
            {
                tenxes = (from tx in datacontext.TenXes
                          where tx.TenXe1.Contains(keyword)
                          select tx).Skip(start).Take(offset).ToList();
            }

            ViewBag.total_rows = total_rows;
            ViewBag.nhanviens = tenxes;
            return View();
        }

        [HttpGet]
        public ActionResult Sua(int idtx)
        {
            TenXe tenxe = (from tx in datacontext.TenXes
                           where tx.IDTenXe == idtx
                           select tx).Single();
            ViewBag.loaihinh = (from lh in datacontext.LoaiHinhDichVus
                                where lh.TinhTrang == 1
                                select lh);

            ViewBag.hang = (from h in datacontext.Hangs
                            where h.TinhTrang == 1
                            select h);

            ViewBag.loaixe = (from lx in datacontext.LoaiXes
                              where lx.TinhTrang == 1
                              select lx);

            ViewBag.hinh = (from hinh in datacontext.Hinhs
                            where hinh.TenXe == tenxe.IDTenXe
                            select hinh);

            return View(tenxe);
        }

        [HttpPost]
        public ActionResult Sua(int idtx, string tenxe, int loaixe, int hang, int loaihinh, IEnumerable<HttpPostedFileBase> files, string txtCheckList)
        {
            // Cập nhật thông tin tên xe
            TenXe _tenxe = (from tx in datacontext.TenXes
                           where tx.IDTenXe == idtx
                           select tx).Single();
            _tenxe.LoaiXe = loaixe;
            _tenxe.LoaiHinh = loaihinh;
            _tenxe.Hang = hang;
            _tenxe.TenXe1 = tenxe;

            datacontext.SubmitChanges();

            // Cập nhật thông tin về hình xe

            // Xóa hình
            if (txtCheckList != "")
            {
                List<string> check = new List<string>();
                string[] temp = txtCheckList.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
                foreach (var s in temp)
                {
                    check.Add(s);
                }
                var hks = (from h in datacontext.Hinhs
                           where h.TenXe == idtx && check.Contains(Convert.ToString(h.ID))
                           select h);
                datacontext.Hinhs.DeleteAllOnSubmit(hks);
                char DirSeparator = System.IO.Path.DirectorySeparatorChar;
                string filepath = "";
                // Set our full path for deleting
                foreach (var f in check)
                {
                    filepath = "~/Content/images" + DirSeparator + f;
                    if (System.IO.File.Exists(Path.GetFullPath(AppDomain.CurrentDomain.BaseDirectory + filepath)))
                    {
                        // Delete our file
                        System.IO.File.Delete(Path.GetFullPath(AppDomain.CurrentDomain.BaseDirectory + filepath));
                    }
                    filepath = "";
                }
            }


            // Thêm hình mới vào CSDL của tên xe
            foreach (var file in files)
            {
                if (file != null)
                {
                    var fileName = Path.GetFileName(file.FileName);
                    var path = Path.Combine(Server.MapPath("~/Content/images"), fileName);
                    file.SaveAs(path);

                    // thêm vào CSDL
                    Hinh hinh = new Hinh();
                    hinh.TenXe = idtx;
                    hinh.Hinh1 = fileName;

                    datacontext.Hinhs.InsertOnSubmit(hinh);
                    datacontext.SubmitChanges();
                }
            }


            // hiển thị thông tin của tên xe


            TenXe __tenxe = (from tx in datacontext.TenXes
                           where tx.IDTenXe == idtx
                           select tx).Single();
            ViewBag.loaihinh = (from lh in datacontext.LoaiHinhDichVus
                                where lh.TinhTrang == 1
                                select lh);

            ViewBag.hang = (from h in datacontext.Hangs
                            where h.TinhTrang == 1
                            select h);

            ViewBag.loaixe = (from lx in datacontext.LoaiXes
                              where lx.TinhTrang == 1
                              select lx);

            ViewBag.hinh = (from hinh in datacontext.Hinhs
                            where hinh.TenXe == __tenxe.IDTenXe
                            select hinh);

            ViewBag.Sua = 1;
            return View(__tenxe);
        }

        [HttpGet]
        public ActionResult Them()
        {
            ViewBag.loaihinh = (from lh in datacontext.LoaiHinhDichVus
                                where lh.TinhTrang == 1
                                select lh);

            ViewBag.hang = (from h in datacontext.Hangs
                            where h.TinhTrang == 1
                            select h);

            ViewBag.loaixe = (from lx in datacontext.LoaiXes
                              where lx.TinhTrang == 1
                              select lx);
            return View();
        }

        [HttpPost]
        public ActionResult Them(string tenxe, int loaihinh, int hang, int loaixe, IEnumerable<HttpPostedFileBase> files)
        {
            TenXe tx = new TenXe();
            tx.TenXe1 = tenxe;
            tx.LoaiHinh = loaihinh;
            tx.Hang = hang;
            tx.LoaiXe = loaixe;

            datacontext.TenXes.InsertOnSubmit(tx);
            datacontext.SubmitChanges();

            // Thêm hình mới vào CSDL của tên xe
            foreach (var file in files)
            {
                if (file != null)
                {
                    var fileName = Path.GetFileName(file.FileName);
                    var path = Path.Combine(Server.MapPath("~/Content/images"), fileName);
                    file.SaveAs(path);

                    // thêm vào CSDL
                    Hinh hinh = new Hinh();
                    hinh.TenXe = tx.IDTenXe;
                    hinh.Hinh1 = fileName;

                    datacontext.Hinhs.InsertOnSubmit(hinh);
                    datacontext.SubmitChanges();
                }
            }

            return View();
        }

        public ActionResult Xoa(int idtx)
        {
            TenXe tenxe = (from tx in datacontext.TenXes
                           where tx.IDTenXe == idtx
                           select tx).Single();

            // Kiểm tra ràng buộc toàn vẹn để có xóa hay không?
            var datxe = (from dx in datacontext.DatXes
                         where dx.TuNgay >= DateTime.Now
                         select dx.TenXe);

            var datxetheotour = (from dxtt in datacontext.DatXeTheoTours
                                 where dxtt.NgayDi >= DateTime.Now
                                 select "DXTT" + dxtt.MaDatXe);

            var xe = (from cx in datacontext.ChuyenXes
                            where datxetheotour.Contains(cx.DatXe)
                            select cx.Xe);


            tenxe.TinhTrang = 0;
            return RedirectToAction("Danhsach");
        }
    }
}
